<!DOCTYPE html>

<html lang="en" data-content_root="../">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

  <title>CMP0180 &mdash; CMake 4.1.1 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=a2c47e09" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css?v=4d06bd55" />
    
    <script src="../_static/documentation_options.js?v=e6a937a4"></script>
    <script src="../_static/doctools.js?v=9bcbadda"></script>
    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
    
    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMP0179" href="CMP0179.html" />
    <link rel="prev" title="CMP0181" href="CMP0181.html" />
 

  </head><body>
    <input id="sidebar-check" type="checkbox" />
    <label id="sidebar-overlay" for="sidebar-check"></label>



    <div class="related relbar1" role="navigation" aria-label="Related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="CMP0179.html" title="CMP0179"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="CMP0181.html" title="CMP0181"
             accesskey="P">previous</a> |</li>
  <li>
    <label class="sidebar-toggle" for="sidebar-check"></label>
  </li>
  <li class="rootlink">
    <img src="../_static/cmake-logo-16.png" width="16" height="16" alt=""/>
    <a href="https://cmake.org/">CMake 4.1.1</a>
    <span class="reldelim1"> &#187;</span>
  </li>
  <li>
    <a href="../index.html">Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-policies.7.html" accesskey="U">cmake-policies(7)</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">CMP0180</a></li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <section id="cmp0180">
<span id="policy:CMP0180"></span><h1>CMP0180<a class="headerlink" href="#cmp0180" title="Link to this heading">¶</a></h1>
<div class="versionadded">
<p><span class="versionmodified added">Added in version 3.31.</span></p>
</div>
<p><span class="target" id="index-0-command:project"></span><a class="reference internal" href="../command/project.html#command:project" title="project"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">project()</span></code></a> always sets <code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_*</span></code> as normal variables.</p>
<p>In CMake 3.29 and below, the <span class="target" id="index-1-command:project"></span><a class="reference internal" href="../command/project.html#command:project" title="project"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">project()</span></code></a> command set
<span class="target" id="index-0-variable:&lt;PROJECT-NAME&gt;_SOURCE_DIR"></span><a class="reference internal" href="../variable/PROJECT-NAME_SOURCE_DIR.html#variable:&lt;PROJECT-NAME&gt;_SOURCE_DIR" title="&lt;PROJECT-NAME&gt;_SOURCE_DIR"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_SOURCE_DIR</span></code></a>, <span class="target" id="index-0-variable:&lt;PROJECT-NAME&gt;_BINARY_DIR"></span><a class="reference internal" href="../variable/PROJECT-NAME_BINARY_DIR.html#variable:&lt;PROJECT-NAME&gt;_BINARY_DIR" title="&lt;PROJECT-NAME&gt;_BINARY_DIR"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_BINARY_DIR</span></code></a>,
and <span class="target" id="index-0-variable:&lt;PROJECT-NAME&gt;_IS_TOP_LEVEL"></span><a class="reference internal" href="../variable/PROJECT-NAME_IS_TOP_LEVEL.html#variable:&lt;PROJECT-NAME&gt;_IS_TOP_LEVEL" title="&lt;PROJECT-NAME&gt;_IS_TOP_LEVEL"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_IS_TOP_LEVEL</span></code></a> as cache entries, but not as
normal variables.  CMake 3.30 started setting them as normal variables,
but only if they are already set as normal variables.  This was needed to
preserve support for some <span class="target" id="index-0-module:FetchContent"></span><a class="reference internal" href="../module/FetchContent.html#module:FetchContent" title="FetchContent"><code class="xref cmake cmake-module docutils literal notranslate"><span class="pre">FetchContent</span></code></a> use cases under policy
<span class="target" id="index-0-policy:CMP0169"></span><a class="reference internal" href="CMP0169.html#policy:CMP0169" title="CMP0169"><code class="xref cmake cmake-policy docutils literal notranslate"><span class="pre">CMP0169</span></code></a>'s NEW behavior, while also preserving behavior of nested
directories that call <span class="target" id="index-2-command:project"></span><a class="reference internal" href="../command/project.html#command:project" title="project"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">project()</span></code></a> with the same project name.
See release notes for 3.30.3, 3.30.4, and 3.30.5 for details.</p>
<p>CMake 3.31 and later prefer to always set <code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_SOURCE_DIR</span></code>,
<code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_BINARY_DIR</span></code>, and <code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_IS_TOP_LEVEL</span></code>, as both
cache entries and normal variables, regardless of what cache or normal
variables already exist.  This policy provides compatibility for projects
that have not been updated to expect this behavior.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">OLD</span></code> behavior for this policy will only set normal variables for
<code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_SOURCE_DIR</span></code>, <code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_BINARY_DIR</span></code>, and
<code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_IS_TOP_LEVEL</span></code> if there is already a normal variable by that
name when <span class="target" id="index-3-command:project"></span><a class="reference internal" href="../command/project.html#command:project" title="project"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">project()</span></code></a> is called.
The <code class="docutils literal notranslate"><span class="pre">NEW</span></code> behavior for this policy will always set normal variables for
<code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_SOURCE_DIR</span></code>, <code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_BINARY_DIR</span></code>, and
<code class="docutils literal notranslate"><span class="pre">&lt;PROJECT-NAME&gt;_IS_TOP_LEVEL</span></code> when <span class="target" id="index-4-command:project"></span><a class="reference internal" href="../command/project.html#command:project" title="project"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">project()</span></code></a> is called.</p>
<p>This policy was introduced in CMake version 3.31.
It may be set by <span class="target" id="index-0-command:cmake_policy"></span><a class="reference internal" href="../command/cmake_policy.html#command:cmake_policy" title="cmake_policy"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">cmake_policy()</span></code></a> or <span class="target" id="index-0-command:cmake_minimum_required"></span><a class="reference internal" href="../command/cmake_minimum_required.html#command:cmake_minimum_required" title="cmake_minimum_required"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">cmake_minimum_required()</span></code></a>.
If it is not set, CMake does <em>not</em> warn, and uses <code class="docutils literal notranslate"><span class="pre">OLD</span></code> behavior.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The <code class="docutils literal notranslate"><span class="pre">OLD</span></code> behavior of a policy is
<span class="target" id="index-0-manual:cmake-policies(7)"></span><a class="reference internal" href="../manual/cmake-policies.7.html#manual:cmake-policies(7)" title="cmake-policies(7)"><code class="xref cmake cmake-manual docutils literal notranslate"><span class="pre">deprecated</span> <span class="pre">by</span> <span class="pre">definition</span></code></a>
and may be removed in a future version of CMake.</p>
</div>
</section>


            <div class="clearer"></div>
          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="Main">
        <div class="sphinxsidebarwrapper">
  <div>
    <h4>Previous topic</h4>
    <p class="topless"><a href="CMP0181.html"
                          title="previous chapter">CMP0181</a></p>
  </div>
  <div>
    <h4>Next topic</h4>
    <p class="topless"><a href="CMP0179.html"
                          title="next chapter">CMP0179</a></p>
  </div>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../_sources/policy/CMP0180.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="Related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="CMP0179.html" title="CMP0179"
             >next</a> |</li>
        <li class="right" >
          <a href="CMP0181.html" title="CMP0181"
             >previous</a> |</li>
  <li>
    <label class="sidebar-toggle" for="sidebar-check"></label>
  </li>
  <li class="rootlink">
    <img src="../_static/cmake-logo-16.png" width="16" height="16" alt=""/>
    <a href="https://cmake.org/">CMake 4.1.1</a>
    <span class="reldelim1"> &#187;</span>
  </li>
  <li>
    <a href="../index.html">Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-policies.7.html" >cmake-policies(7)</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">CMP0180</a></li> 
      </ul>
    </div>

    <div class="footer" role="contentinfo">
    &#169; Copyright 2000-2025 Kitware, Inc. and Contributors.
      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.1.3.
    </div>
<script type="text/javascript">
(function() {
  "use strict";
  const hide = () => document.getElementById("sidebar-check").checked = false;
  addEventListener("keydown", e => (e.key === "Escape") && hide());
  addEventListener("click", e => (e.target.tagName === "A") && hide());
  addEventListener("hashchange", hide)
})();
</script>
  </body>
</html>